/**
 * 线程阻塞队列
 * 顶层接口：
 *      Collection interface
 *              |
 *              |
 *              |
 *        Queue interface
 *              |
 *              |
 *              |
 *     BlockingQueue interface
 *              |
 *              |
 *              |
 *    --------------------------
 *    |      |         |       |
 *    |      |         |       |  Class
 *    |      |         |       |
 *  ArrayBlockingQueue LinkedBlockingDeque SynchronousQueue
 *  DelayQueue PriorityBlockingQueue LinkedBlockingDeque
 *  LinkedTransferQueue
 *
 *  ArrayBlockingQueue：由数组结构组成的有界阻塞队列。
 *  LinkedBlockingQueue：由链表结构组成的有界（但大小默认值为Integer.MAX_VALUE）阻塞队列。
 *  PriorityBlockingQueue：支持优先级排序的无界阻塞队列。
 *  DelayQueue：使用优先级队列实现延迟无界阻塞队列。
 *  SynchronousQueue：不存储元素的阻塞队列。队列内始终只有一个元素，还会立马被消费掉
 *  LinkedTransferQueue：由链表结构成的无界阻塞队列。
 *  LinkedBlockingDeque：由链表结构组成的双向阻塞队列。
 *
 *
 *  BlockingQueue的核心方法
 *              插入          移除           检查
 *  异常：     add(E e)        remove(E e)   element()
 *  特殊值：   offer(E e)      poll()         peek()
 *  阻塞：     put(E e)        take()        不可用
 *  超时：     offer(E e,long time,TimeUnit unit)    poll(long time, TimeUnit unit)  不可用
 *
 *
 */
package com.wzw.basics.concurrent.blockingqueue;